import { Message } from 'element-ui'
import router from './router'

import store from './store'

// 导航守卫
router.beforeEach(async(to, from, next) => {
  const token = store.getters.token
  const url = to.path
  // 有 token 去登录页 => 首页
  if (token && url === '/login') {
    Message.warning('已经登录过了!!')
    next('/')
  }

  // 有 token 不是去登录页 => 放行
  if (token && url !== '/login') {
    if (!store.state.user.userInfo.userId) {
      await store.dispatch('user/getUserInfo')

      // const menus = store.state.user.userInfo.roles.menus
      // console.log(menus)
      // 权限的校验
      const routers = await store.dispatch('permission/filterRouter', store.state.user.userInfo.roles.menus)

      // .addRoutes()追加路由
      // 解决刷新会调到404页的问题
      router.addRoutes([...routers, { path: '*', redirect: '/404', hidden: true }])

      // 解决没有404后,白屏的问题
      // 原因是 初始进来 导航守卫 时 会先找 to, from,(去,来自,) 刚开始是没有追加路由的, 所以to找到的是 空 页面,解决方法是 在原来基础上 再跳转到当前页
      next(to.path)
      // return 不会影响到下面的next()
      return
    }
    next()
  }

  const whiteList = ['/login', '/404']
  // 没 token 允许不登录就查看的, 放行
  if (!token && whiteList.includes(url)) {
    next()
  }

  // 没 token 其他页面,跳转登录页
  if (!token && !whiteList.includes(url)) {
    Message.warning('请先登录!!')
    next('/login')
  }

  // if (store.getters.token) {
  //   // 有 token 去登录页 => 首页
  //   if (to.path === '/login') {
  //     Message.warning('已经登录过了!!')
  //     next('/')
  //   } else {
  //     // 有 token 不是去登录页 => 放行
  //     next()
  //   }
  // } else {
  //   const whiteList = ['/login', '/404']
  //   // if (whiteList.indexOf(to.path) !== -1) {
  //   if (whiteList.includes(to.path)) {
  //     // 没 token 允许不登录就查看的, 放行
  //     next()
  //   } else {
  //     // 没 token 其他页面,跳转登录页
  //     Message.warning('请先登录!!')
  //     next('/login')
  //   }
  // }
})
